Lua 5.3 Reference Manual

by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes

Copyright © 2015 Lua.org, PUC-Rio. Freely available under the terms of the Lua license.

The Complete Syntax of Lua

Here is the complete syntax of Lua in extended BNF. As usual in extended BNF, {A} means 0 or more As, and [A] means an optional A. (For operator precedences, see Precedence; for a description of the terminals Name, Numeral, and LiteralString, see Lexical Conventions.)

			chunk ::= block

			block ::= {stat} [retstat]

			stat ::=  ‘;’ | 
			varlist ‘=’ explist | 
			functioncall | 
			label | 
			break | 
			goto Name | 
			do block end | 
			while exp do block end | 
			repeat block until exp | 
			if exp then block {elseif exp then block} [else block] end | 
			for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end | 
			for namelist in explist do block end | 
			function funcname funcbody | 
			local function Name funcbody | 
			local namelist [‘=’ explist] 

			retstat ::= return [explist] [‘;’]

			label ::= ‘::’ Name ‘::’

			funcname ::= Name {‘.’ Name} [‘:’ Name]

			varlist ::= var {‘,’ var}

			var ::=  Name | prefixexp ‘[’ exp ‘]’ | prefixexp ‘.’ Name 

			namelist ::= Name {‘,’ Name}

			explist ::= exp {‘,’ exp}

			exp ::=  nil | false | true | Numeral | LiteralString | ‘...’ | functiondef | 
			prefixexp | tableconstructor | exp binop exp | unop exp 

			prefixexp ::= var | functioncall | ‘(’ exp ‘)’

			functioncall ::=  prefixexp args | prefixexp ‘:’ Name args 

			args ::=  ‘(’ [explist] ‘)’ | tableconstructor | LiteralString 

			functiondef ::= function funcbody

			funcbody ::= ‘(’ [parlist] ‘)’ block end

			parlist ::= namelist [‘,’ ‘...’] | ‘...’

			tableconstructor ::= ‘{’ [fieldlist] ‘}’

			fieldlist ::= field {fieldsep field} [fieldsep]

			field ::= ‘[’ exp ‘]’ ‘=’ exp | Name ‘=’ exp | exp

			fieldsep ::= ‘,’ | ‘;’

			binop ::=  ‘+’ | ‘-’ | ‘*’ | ‘/’ | ‘//’ | ‘^’ | ‘%’ | 
			‘&’ | ‘~’ | ‘|’ | ‘>>’ | ‘<<’ | ‘..’ | 
			‘<’ | ‘<=’ | ‘>’ | ‘>=’ | ‘==’ | ‘~=’ | 
			and | or

			unop ::= ‘-’ | not | ‘#’ | ‘~


 

© 2009 - 2016 QSC, LLC. All rights reserved. QSC and the QSC logo are trademarks of QSC, LLC in the U.S. Patent and Trademark office and other countries. All other trademarks are the property of their respective owners.

http://patents.qsc.com.